//
//  StaticData.cpp
//  捕鱼达人练习例子
//
//  Created by 杜 甲 on 13-7-4.
//
//

#include "StaticData.h"
//static_data.plist是静态数据的来源
#define STATIC_DATA_PATH "static_data.plist"

static StaticData* _sharedStaticData = NULL;

StaticData* StaticData::sharedStaticData()
{
    if (_sharedStaticData == NULL)
    {
        _sharedStaticData = new StaticData();
        _sharedStaticData->init();
    }
    return _sharedStaticData;
}
StaticData::StaticData()
{
    //在构造方法中将静态数据的数据源赋值给一个C++的字符串
    _staticDataPath = STATIC_DATA_PATH;
}

StaticData::~StaticData()
{
    //在析构方法中将这个字典安全释放
    CC_SAFE_RELEASE_NULL(_dictionary);
}

bool StaticData::init()
{
    //初始化一个字典，数据的
    _dictionary = CCDictionary::createWithContentsOfFile(_staticDataPath.c_str());
    //这个字典需要在当前这个类的其他方法中使用，因此需要retain一下，释放的代码写在析构方法中。
    CC_SAFE_RETAIN(_dictionary);
    return true;
}
//从字典中取值返回C的字符串的方法
const char* StaticData::stringFormKey(string key)
{
    CCLog("%s", _dictionary->valueForKey(key)->getCString());
    return _dictionary->valueForKey(key)->getCString();
}
//从字典中取值返回int值的方法
int StaticData::intFromKey(string key)
{
    return _dictionary->valueForKey(key)->intValue();
}
//从字典中取值返回一个浮点数的方法
float StaticData::floatFromKey(string key)
{
    return _dictionary->valueForKey(key)->floatValue();
}

//从字典中取值返回一个bool值的方法
bool StaticData::booleanFromKey(string key)
{
    return _dictionary->valueForKey(key)->boolValue();
}
//从字典中取值返回一个CCPoint值的方法
CCPoint StaticData::pointFromKey(string key)
{
    //从字符串中取出一个CCPoint类型的数据
    return CCPointFromString(_dictionary->valueForKey(key)->getCString());
}
//从字典中取值返回一个CCRect值的方法
CCRect StaticData::rectFromKey(string key)
{
    //从字符串中取出一个CCRect类型的数据
    return CCRectFromString(_dictionary->valueForKey(key)->getCString());
}

//从字典中取值返回一个CCSize值的方法
CCSize StaticData::sizeFromKey(string key)
{
    //从字符串中取出一个CCSize类型的数据
    return CCSizeFromString(_dictionary->valueForKey(key)->getCString());
}

//内存不足时调用
void StaticData::purge()
{
     //使用release()方法释放Cocos2d-x对象p的一次引用，再把p赋值为NULL。如果p已经为NULL，则不进行操作  
    CC_SAFE_RELEASE_NULL(_sharedStaticData);
}

